package org.hfy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.hfy.dto.OptionDTO;
import org.hfy.dto.QuotationQueryDTO;
import org.hfy.entity.Quotation;

import java.util.List;

/**
 * 报价单服务接口
 * 
 * @author hfy
 * @version 1.0
 */
public interface QuotationService extends IService<Quotation> {

    /**
     * 分页查询报价单列表
     */
    IPage<Quotation> getQuotationPage(QuotationQueryDTO query);

    /**
     * 根据ID查询报价单详情（包含物料明细）
     */
    Quotation getQuotationWithItemsById(Long id);

    /**
     * 创建报价单
     */
    Quotation createQuotation(Quotation quotation);

    /**
     * 更新报价单
     */
    Quotation updateQuotation(Long id, Quotation quotation);

    /**
     * 删除报价单
     */
    boolean deleteQuotation(Long id);

    /**
     * 生成合同
     */
    Long generateContract(Long quotationId);

    /**
     * 获取客户选项列表
     */
    List<OptionDTO> getCustomerOptions();

    /**
     * 获取业务员选项列表
     */
    List<OptionDTO> getEmployeeOptions();

    /**
     * 生成报价单号
     */
    String generateQuotationNo();

    /**
     * 提交报价单
     */
    boolean submitQuotation(Long id);

    /**
     * 保存草稿
     */
    Quotation saveDraft(Quotation quotation);

    /**
     * 更新报价单状态为合同审核通过
     */
    boolean updateStatusToContractApproved(Long quotationId);

    /**
     * 更新报价单状态为合同审核拒绝
     */
    boolean updateStatusToContractRejected(Long quotationId);

    /**
     * 更新报价单状态为外发加工中
     */
    boolean updateStatusToOutsourcing(Long quotationId);

    /**
     * 更新报价单状态为已入库
     */
    boolean updateStatusToWarehoused(Long quotationId);

    /**
     * 根据状态列表查询报价单
     */
    List<Quotation> getQuotationsByStatus(List<String> statusList);
} 